﻿using JX.Core.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace JX.Application
{
	public partial interface INodesServiceAppDapper : IServiceAppDapper<NodesEntity>
	{
		#region 得到实体类
		/// <summary>
		/// 获取节点信息，不包含扩展信息
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		NodesEntity GetNodeById(int nodeId);

		/// <summary>
		/// 从缓存中得到节点信息，不包含扩展信息
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		NodesEntity GetCacheNodeById(int nodeId);
		/// <summary>
		/// 按标识符获取节点，不包含扩展信息
		/// </summary>
		/// <param name="identifier"></param>
		/// <returns></returns>
		NodesEntity GetNodeByIdentifier(string identifier);
		/// <summary>
		/// 按子域名获取节点，不包含扩展信息
		/// </summary>
		/// <param name="subDomain"></param>
		/// <returns></returns>
		NodesEntity GetNodeBySubDomain(string subDomain);
		/// <summary>
		/// 通过指定ParentID下的，指定NodeID的对应节点信息
		/// </summary>
		/// <param name="parentId"></param>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		NodesEntity GetParentNodeByNodeId(int parentId, int nodeId);
		/// <summary>
		/// 获取根节点信息，不包含扩展信息
		/// </summary>
		/// <param name="parentPath">父节点路径(0,1,2,3)</param>
		/// <returns></returns>
		NodesEntity GetRootNodeByParentPath(string parentPath);
		/// <summary>
		/// 获取根节点信息，不包含扩展信息
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <returns></returns>
		NodesEntity GetRootNodeInfo(NodesEntity nodeInfo);
		#endregion

		#region 得到实体类列表
		/// <summary>
		/// 获取所有的节点列表（包含容器栏目、专题栏目、单页节点和外链），并添加 '所有栏目'为根节点
		/// </summary>
		/// <param name="nodeType">节点类型</param>
		/// <param name="isShowArchiving">是否显示归档类型的节点</param>
		/// <param name="isAddAll">是否添加'所有栏目'为根节点</param>
		/// <returns></returns>
		IList<NodesEntity> GetNodeList(NodeType nodeType = NodeType.None, bool isShowArchiving = false, bool isAddAll = false);
		/// <summary>
		/// 获取节点列表包括归档节点
		/// </summary>
		/// <param name="nodesId">多个ID用“,”分割</param>
		/// <param name="isShowArchiving">是否显示归档节点</param>
		/// <returns></returns>
		IList<NodesEntity> GetNodeList(string nodesId, bool isShowArchiving = false);

		/// <summary>
		///  获取存档内容节点列表
		/// </summary>
		/// <param name="isShowArchiving"></param>
		/// <returns></returns>
		IList<NodesEntity> GetNodesListByArchiving(bool isShowArchiving);
		/// <summary>
		/// 获取所有节点类型为容器栏目的节点列表，并添加 '所有栏目'为根节点。
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetNodeListByContainer();
		/// <summary>
		/// 按父节点ID获取子节点列表
		/// </summary>
		/// <param name="parentId"></param>
		/// <returns></returns>
		IList<NodesEntity> GetNodesListByParentId(int parentId);
		/// <summary>
		/// 按根节点获取第一级子节点列表
		/// </summary>
		/// <param name="rootId"></param>
		/// <returns></returns>
		IList<NodesEntity> GetNodesListByRootId(int rootId);
		/// <summary>
		/// 获取指定节点ID集的节点列表
		/// </summary>
		/// <param name="arrChildId">多个ID用“,”分割</param>
		/// <returns></returns>
		IList<NodesEntity> GetNodesListInArrChildId(string arrChildId);
		/// <summary>
		/// 按父节点路径获取子节点列表，按Depth排序。
		/// </summary>
		/// <param name="parentPath">多个ID用“,”分割</param>
		/// <returns></returns>
		IList<NodesEntity> GetNodesListInParentPath(string parentPath);
		/// <summary>
		/// 获取指定用户组、指定权限码、可匿名访问的节点列表。
		/// 栏目权限。0--开放栏目  1--半开放栏目  2--认证栏目
		/// </summary>
		/// <param name="groupId">会员组ID</param>
		/// <param name="operateCode"></param>
		/// <returns></returns>
		IList<NodesEntity> GetAnonymousNodeId(int groupId, string operateCode);
		/// <summary>
		/// 获取所有绑定了内容模型的节点列表
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetContentNodeList();
		/// <summary>
		/// 获取所有绑定了商品模型的节点列表
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetShopNodeList();
		/// <summary>
		/// 按父节点获取商城节点列表
		/// </summary>
		/// <param name="parentId"></param>
		/// <returns></returns>
		IList<NodesEntity> GetShopNodeListByParentId(int parentId);

		/// <summary>
		/// 获取父节点下所有节点的下拉选择树
		/// </summary>
		/// <param name="parentID"></param>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameByParentID(int parentID);
		/// <summary>
		/// 获取节点类型为容器节点的下拉选择树
		/// </summary>
		/// <param name="isShowArchiving">是否显示归档节点</param>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameForContainerItems(bool isShowArchiving = false);
		/// <summary>
		/// 获取所有节点的下拉选择树（包含容器栏目、专题栏目、单页节点和外链）
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameForItems();
		/// <summary>
		/// 获取所有节点的下拉选择树（不包含外链节点）
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameForItemsExceptOutLinks();
		/// <summary>
		/// 获取内容节点下拉选择树
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameForContent();
		/// <summary>
		/// 获取商城节点下拉选择树
		/// </summary>
		/// <returns></returns>
		IList<NodesEntity> GetNodeNameForShop();
		#endregion

		#region 是否存在数据
		/// <summary>
		///  判断同级节点下是否存在同名的节点目录
		/// </summary>
		/// <param name="parentId">父节点ID</param>
		/// <param name="nodeDir">目录名称</param>
		/// <returns></returns>
		bool ExistsNodeDir(int parentId, string nodeDir);
		/// <summary>
		///  判断同级节点下是否存在同名的节点标识
		/// </summary>
		/// <param name="parentId">父节点ID</param>
		/// <param name="nodeIdentifier">节点标识</param>
		/// <returns></returns>
		bool ExistsNodeIdentifier(int parentId, string nodeIdentifier);
		/// <summary>
		///  判断同级节点下是否存在同名的节点名称
		/// </summary>
		/// <param name="parentId">父节点ID</param>
		/// <param name="nodeName">节点名称</param>
		/// <returns></returns>
		bool ExistsNodeName(int parentId, string nodeName);
		/// <summary>
		/// 判断移动的节点是否包含目标节点
		/// </summary>
		/// <param name="targetNodeId">目标节点</param>
		/// <param name="arrChildId">子节点ID，多个ID用“,”分割</param>
		/// <returns></returns>
		bool ExistsTargetNodeIdInArrChildId(int targetNodeId, string arrChildId);
		#endregion

		#region 判断数据是否正确
		/// <summary>
		/// 判断指定的模板ID，是否为指定节点的默认模板ID
		/// </summary>
		/// <param name="nodeId"></param>
		/// <param name="templateId"></param>
		/// <returns></returns>
		bool GetDefaultTemplate(int nodeId, int templateId);
		#endregion

		#region 检查节点权限
		/// <summary>
		/// 检查节点权限
		/// 1、节点是否存在。
		/// 2、有子栏目时是否可以在此栏目添加内容
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		bool CheckNodePermission(int nodeId);
		/// <summary>
		/// 检查当前登录管理员，对指定节点，指定操作，是否有权限
		/// </summary>
		/// <param name="nodeId"></param>
		/// <param name="operateCode"></param>
		/// <returns></returns>
		bool CheckRoleNodePurview(int nodeId, OperateCode operateCode);
		#endregion

		#region 检查IP
		/// <summary>
		/// 检查当前登录用户的IP是否在指定的IP白名单中，只对动态页面有效。
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <returns></returns>
		bool CheckIPlock(NodesEntity nodeInfo);
		#endregion

		#region 添加、修改、删除节点

		#region 添加节点
		/// <summary>
		/// 添加节点。
		/// 1.生成新节点ID。
		/// 2.检查节点名称和节点标识符是否已存在。
		/// 3.如果节点为容器节点，则判断节点目录是否存在。
		/// 4.如果节点不是根节点则检查父节点是否存在 ,并检查父节点是否为链接节点或单页节点。
		/// 5.更新父节点的子节点信息。
		/// 6.生成前一节点后一节点ID,更新前一节点后一节点的信息。
		/// 7.清除缓存节点。
		/// 8.返回值：0:添加失败；1:添加成功；2:节点名存在；3:节点标识符存在；4:节点目录存在；5:父节点为链接节点或单页节点不允许添加；6:父节点不存在
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <returns></returns>
		int AddNode(NodesEntity nodeInfo);
		/// <summary>
		/// 1、添加节点并添加节点模型模板。
		/// 2、生成节点静态化所用的文件夹。
		/// 3、生成AjaxProxyPage页面。
		/// 4、返回值：0:添加失败；1:添加成功；2:节点名存在；3:节点标识符存在；4:节点目录存在；5:父节点为链接节点或单页节点不允许添加；6:父节点不存在
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <param name="infoList"></param>
		/// <returns></returns>
		int AddNode(NodesEntity nodeInfo, IList<NodesModelTemplateEntity> infoList);
		#endregion

		#region 更新节点
		/// <summary>
		/// 更新节点。
		/// 1、判断节点名称和节点标识符是否存在。
		/// 2、更新节点。
		/// 3、生成节点静态化所用的文件夹。
		/// 4、生成AjaxProxyPage页面。
		/// 5、删除所有节点缓存。
		/// 6、返回值：0：更新失败；1：更新成功；2：节点名称已经存在；3：节点标识符已经存在；
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <returns></returns>
		int UpdateNode(NodesEntity nodeInfo);
		/// <summary>
		/// 更新节点及节点模板。
		/// 1、判断节点名称和节点标识符是否存在。
		/// 2、更新节点。
		/// 3、生成节点静态化所用的文件夹。
		/// 4、生成AjaxProxyPage页面。
		/// 5、删除所有节点缓存。
		/// 6、更新节点模型模板关系。
		/// 7、返回值：0：更新失败；1：更新成功；2：节点名称已经存在；3：节点标识符已经存在；
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <param name="infoList"></param>
		/// <returns></returns>
		int UpdateNode(NodesEntity nodeInfo, IList<NodesModelTemplateEntity> infoList);
		#endregion

		#region 删除节点、节点目录及相关联系
		/// <summary>
		/// 删除节点。
		/// 1.删除文件夹。
		/// 2.删除所有节点关系。
		/// 3.删除节点下的所有内容信息。
		/// 4.删除所有子节点。
		/// 5.更新父节点。
		/// 6.修复节点目录关系。
		/// 7.清除缓存节点。
		/// 8.返回值：1：删除成功；2：节点不存在；3：首页节点，禁止删除；4：删除节点目录失败；
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		int Delete(int nodeId);
		/// <summary>
		/// 删除所有指定的节点
		/// </summary>
		/// <param name="arrChildId">节点ID，多个ID用“,”分割</param>
		/// <returns></returns>
		bool DeleteInArrChild(string arrChildId);
		#endregion

		#endregion

		#region 批量更新节点的“栏目选项”与“前台样式”等属性设置
		/// <summary>
		/// 批量更新节点的“栏目选项”与“前台样式”。
		/// 批量更新节点指定字段列表（包括节点设置字段nodeInfo.Settings（EnableComment，EnableProtect，EnableValidCode，EnableAddWhenHasChild，PresentExp,ShowChargeType,DefaultItemPoint,DefaultItemDividePercent）)
		/// </summary>
		/// <param name="nodeInfo">包含新节点值的节点对象</param>
		/// <param name="nodesId">要批量更新的节点集，多个ID用“,”分割</param>
		/// <param name="checkItem">指定要更新的字段列表：checkItem["EnableComment"]=true </param>
		/// <returns></returns>
		bool BatchUpdate(NodesEntity nodeInfo, string nodesId, Dictionary<string, bool> checkItem);
		/// <summary>
		/// 批量更新节点的“前台样式”。
		/// 批量更新节点字段 OpenType PurviewType WorkFlowID HitsOfHot LeastOfEliteLevel ShowOnMenu ShowOnListIndex
		/// </summary>
		/// <param name="nodeInfo">包含新节点值的节点对象</param>
		/// <param name="nodesId">要批量更新的节点集，多个ID用“,”分割</param>
		/// <param name="checkItem">指定要更新的字段列表</param>
		/// <returns></returns>
		bool BatchUpdateField(NodesEntity nodeInfo, string nodesId, Dictionary<string, bool> checkItem);
		#endregion

		#region 更新和得到节点排序号
		/// <summary>
		/// 更新节点排序号
		/// </summary>
		/// <param name="nodeId">节点ID</param>
		/// <param name="orderId">排序号</param>
		/// <returns></returns>
		bool UpdateOrderId(int nodeId, int orderId);
		/// <summary>
		/// 更新节点排序号：更新指定根节点下的所有排序号，条件为当前排序号大于指定排序号的节点
		/// </summary>
		/// <param name="rootId">根节点ID</param>
		/// <param name="orderId">排序号</param>
		/// <param name="addNum">在当前排序号上，要添加的排序数量</param>
		/// <returns></returns>
		bool UpdateOrderId(int rootId, int orderId, int addNum);
		/// <summary>
		/// 获取指定节点集中的最大排序号
		/// </summary>
		/// <param name="arrChildId">节点ID，多个ID用“,”分割</param>
		/// <returns></returns>
		int GetPrevOrderId(string arrChildId);
		#endregion

		#region 更新和得到节点的栏目权限设置
		/// <summary>
		/// 更新指定节点及所有子节点的栏目权限设置(栏目权限。0--开放栏目  1--半开放栏目  2--认证栏目 3--归档栏目)
		/// </summary>
		/// <param name="nodeId"></param>
		/// <param name="purviewType">栏目权限。0--开放栏目  1--半开放栏目  2--认证栏目 3--归档栏目</param>
		/// <returns></returns>
		bool UpdateChildPurview(int nodeId, int purviewType);
		/// <summary>
		/// 更新指定节点的栏目权限设置，与当前节点及所有子节点的栏目权限设置中最严格的设置为同一设置。
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		bool UpdateNodePurviewType(int nodeId);
		/// <summary>
		/// 获取指定节点及所有子节点中栏目权限设置最严格的权限类型
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		int GetMaxPurviewTypeInParentPath(int nodeId);
		#endregion

		#region 更新节点的子节点数量
		/// <summary>
		/// 更新指定节点的子节点数量（Child = Child + 1）
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		bool UpdateChild(int nodeId);
		/// <summary>
		/// 更新指定节点的子节点数量（Child = @Child）
		/// </summary>
		/// <param name="nodeId">节点ID</param>
		/// <param name="child">指定的子节点数量</param>
		/// <returns></returns>
		bool UpdateChild(int nodeId, int child);
		#endregion

		#region 更新IsNeedCreateHtml和ArrChildId属性
		/// <summary>
		/// 更新指定节点的IsNeedCreateHtml属性（是否需要生成静态化HTML）
		/// </summary>
		/// <param name="arrNodeId">节点ID，多个ID用“,”分割</param>
		/// <param name="needCreateHtml">是否需要生成静态化</param>
		/// <returns></returns>
		bool UpdateNeedCreateHtml(string arrNodeId, bool needCreateHtml);
		/// <summary>
		/// 更新指定节点的子节点集
		/// </summary>
		/// <param name="nodeId">要更新的节点ID</param>
		/// <param name="arrChildId">子节点集(节点ID，多个ID用“,”分割)</param>
		/// <returns></returns>
		bool UpdateArrChildId(int nodeId, string arrChildId);
		#endregion

		#region 排序节点与修复节点结构
		/// <summary>
		/// 重新排序节点
		/// </summary>
		/// <param name="nodeList"></param>
		void OrderNode(IList<NodesEntity> nodeList);
		/// <summary>
		/// 修复节点结构
		/// </summary>
		void PatchNodes();
		#endregion

		#region 更新节点树结构
		/// <summary>
		/// 更新节点树结构
		/// </summary>
		/// <param name="nodeInfo"></param>
		void ModifyNodeStructure(NodesEntity nodeInfo);
		#endregion

		#region 整理节点树
		/// <summary>
		/// 重新整理子节点树。返回值：0：整理成功；1：节点不存在或不是根节点；
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		int ResetChildNodes(int nodeId);
		/// <summary>
		/// 重新整理节点树。所有节点都将作为一级节点
		/// </summary>
		void ResetNodes();
		#endregion

		#region 得到、更新下一节点ID(NextID字段)
		/// <summary>
		/// 获取下一节点ID
		/// </summary>
		/// <param name="depth">节点深度</param>
		/// <param name="parentPath">节点ID，多个ID用“,”分割</param>
		/// <returns></returns>
		int GetNextIdByDepth(int depth, string parentPath);
		#endregion

		#region 得到最大节点ID、相邻的上一个节点ID、节点审核流程ID
		/// <summary>
		/// 获取节点审核流程ID
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		int GetNodeWorkFlowId(int nodeId);
		/// <summary>
		/// 获取最大节点ID
		/// </summary>
		/// <returns></returns>
		int GetMaxNodeId();
		/// <summary>
		/// 得到相邻的上一个节点ID
		/// </summary>
		/// <param name="parentId">当前节点的父节点ID</param>
		/// <returns></returns>
		int GetPrevId(int parentId);
		/// <summary>
		/// 获取根节点的前一节点ID(条件：RootID = @RootID AND Depth = 0)
		/// </summary>
		/// <param name="maxRootId"></param>
		/// <returns></returns>
		int GetRootPrevId(int maxRootId);
		#endregion

		#region 得到、更新节点的语言名称设置
		/// <summary>
		/// 通过信息ID，获取所属节点的语言名称
		/// </summary>
		/// <param name="generalId"></param>
		/// <returns></returns>
		string GetCultureNameByGeneralId(int generalId);
		/// <summary>
		/// 判断节点是否设置了语言区域选项,如果没有则设置为站点配置语言区域选项
		/// </summary>
		void IsNodesExistCultureName();
		#endregion

		#region 获取总节点数、节点下的内容信息数量、同级目录的节点数量
		/// <summary>
		/// 统计指定节点下的内容信息数量(通过表：CommonInfo)
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		int GetCountModelByNodeId(int nodeId);
		/// <summary>
		/// 获取同级目录的节点数量(条件：ParentID=@ParentID AND NodeID《》@NodeID AND NodeDir=@NodeDir)
		/// </summary>
		/// <param name="parentId"></param>
		/// <param name="nodeId"></param>
		/// <param name="nodeDir"></param>
		/// <returns></returns>
		int GetCountNodesBySameNodeDir(int parentId, int nodeId, string nodeDir);
		/// <summary>
		/// 获取总节点数
		/// </summary>
		/// <returns></returns>
		int GetTotalOfNodes();
		#endregion

		#region 上传路径解析
		/// <summary>
		/// 上传路径解析。
		/// 根据节点及站点配置的生成HTML的文件名规则生成文件名:替换{$FileType} {$Year} {$Month}等为实际值
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <param name="fileName">上传文件名</param>
		/// <returns></returns>
		string UploadPathParse(NodesEntity nodeInfo, string fileName);
		/// <summary>
		/// 解析上传目录。
		/// 根据节点上传文件路径规则，生成实际上传路径：替换 {$NodeDir} {$ParentDir} {$NodeIdentifier} {$RootDir}
		/// </summary>
		/// <param name="nodeInfo"></param>
		/// <param name="uploadFilePathRule"></param>
		/// <returns></returns>
		string ResolveUploadDir(NodesEntity nodeInfo, string uploadFilePathRule);
		#endregion

		#region 复制、移动、合并节点
		/// <summary>
		/// 拷贝节点及所有关系，成功返回新节点ID。
		/// 返回值：-1：添加“节点－模型－模板”关系失败；0：复制失败；新节点ID：复制成功；
		/// </summary>
		/// <param name="nodeId">被复制的节点ID</param>
		/// <returns></returns>
		int GetNodeByIdCopyNode(int nodeId);
		/// <summary>
		/// 移动节点。
		/// 返回值：调用WriteMessageByErrorNum（）方法显示
		/// </summary>
		/// <param name="nodeId">被移动的节点</param>
		/// <param name="moveToNodeId">要移动到的节点</param>
		/// <returns></returns>
		int NodesMove(int nodeId, int moveToNodeId);
		/// <summary>
		/// 节点合并：合并两个节点下的信息到一个节点中，并返回不同的错误状态值，返回0代表成功。
		/// 返回值：调用WriteNodesUniteMessage（）方法显示
		/// </summary>
		/// <param name="nodeId">被合并的节点，合并成功后会被删除</param>
		/// <param name="targetNodeId">合并的目标节点</param>
		/// <returns></returns>
		int NodesUnite(int nodeId, int targetNodeId);
		/// <summary>
		/// 批量移动节点时根据错误号返回错误消息 :找不到指定的节点或者已经被删除 节点移动失败
		/// </summary>
		/// <param name="errorNum"></param>
		/// <returns></returns>
		string WriteMessageByErrorNum(int errorNum);
		/// <summary>
		/// 合并节点时根据错误号生成错误消息
		/// </summary>
		/// <param name="errorType"></param>
		/// <returns></returns>
		string WriteNodesUniteMessage(int errorType);
		#endregion

		#region 生成节点导航
		/// <summary>
		/// 生成节点导航：根节点》父节点》节点
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		string ShowNodesAndRootNavigation(int nodeId);
		/// <summary>
		/// 生成节点导航：根节点》父节点
		/// </summary>
		/// <param name="nodeId"></param>
		/// <returns></returns>
		string ShowParentNodesNavigation(int nodeId);
		/// <summary>
		/// 生成节点导航，用于后台管理页面：根节点》父节点》《a》节点《/a》
		/// </summary>
		/// <param name="nodeId">节点导航中最尾端的节点ID</param>
		/// <returns></returns>
		string ShowNodeNavigation(int nodeId);
		/// <summary>
		/// 生成节点导航，用于后台管理页面：根节点》父节点》《a》节点《/a》
		/// </summary>
		/// <param name="nodeId">节点导航中最尾端的节点ID</param>
		/// <param name="navigation">A标签的链接地址，留空为“/Admin/Contents/ContentManage”</param>
		/// <returns></returns>
		string ShowNodeNavigation(int nodeId, string navigation);
		#endregion

		#region 删除缓存
		/// <summary>
		/// 删除所有节点的缓存信息
		/// </summary>
		void RemoveCacheAllNodeInfo();
		/// <summary>
		/// 删除指定节点的缓存信息
		/// </summary>
		/// <param name="nodeId"></param>
		void RemoveCacheByNodeId(int nodeId);
		#endregion

		#region 其他
		/// <summary>
		/// 生成节点目录树，用于管理后台
		/// </summary>
		/// <param name="depth"></param>
		/// <param name="parentPath"></param>
		/// <param name="nextId"></param>
		/// <param name="child"></param>
		/// <returns></returns>
		string GetTreeLine(int depth, string parentPath, int nextId, int child);
		/// <summary>
		/// 获取指定节点的子节点数组词典(NodeID与ArrChildID的对照表)
		/// </summary>
		/// <param name="parentPath">节点ID，多个ID用“,”分割</param>
		/// <returns></returns>
		Dictionary<int, string> GetParentPathArrChildId(string parentPath);
		/// <summary>
		/// 根据传入的参数，生成类似“（子节点数量） [节点目录名称]”的字符串。生成节点树时附加的节点信息
		/// </summary>
		/// <param name="child"></param>
		/// <param name="nodeType"></param>
		/// <param name="nodeDir"></param>
		/// <returns></returns>
		string GetNodeDir(int child, NodeType nodeType, string nodeDir);
		/// <summary>
		/// 得到使用指定模型的节点名称表（表结构：NodeID、NodeName）
		/// </summary>
		/// <param name="modelId"></param>
		/// <param name="nodeType"></param>
		/// <returns></returns>
		DataTable GetNodeNameByModelId(int modelId, NodeType nodeType);
		#endregion
	}
}
